博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb学习-案例练习-图书管理前台-12-给搜索框添加搜索提示功能
阅读量:4302 次
发布时间:2019-05-27

本文共 3526 字,大约阅读时间需要 11 分钟。

这篇来利用Ajax做一个给搜索框添加搜索提示的功能,这个我们在百度首页,搜索框随便输入一个字符,就能弹出联想自动,可供用户选择,这篇要做的就是这么一个场景。

 

1.需求

就是这么一个功能。

 

2.文件准备

需求中这个index.jsp中的搜索在我们原来项目中没有这个代码,所以这里先把这个素材拷贝进来。(具体素材在我这个项目github上有)

本篇主要是index.jsp和menu_search.jsp这两个文件。在index.jsp中静态包含了menu_search.jsp,代码中,这行代码就是我们前面学习JSP指令学习过的静态包含,是在JSP转换Servlet时引入的文件。

 

3.给搜索框添加信息提示框

在mene_search.jsp中,给搜索框先整出一个div框来,宽度和搜索框的宽度一样,为了显示明显,先来给边框添加红色。

在menu_serch.jsp文件底部,添加一个div,代码如下。

浏览器刷新,看看效果。

 

4.创建一个空的servlet文件

先创建一个SearchBookAJAXServlet.java,对应的url映射是/searchBookAJAXServlet

这部分代码后面来写。

 

5.Dao层代码

在BookDao接口文件中,最底部添加这个代码

public List searchBookByName(String name) throws SQLException;

在BookDaoImpl.java添加对应的具体方法实现代码。

public List searchBookByName(String name) throws SQLException {      QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());      return qr.query("select name from book where name like ?", new ColumnListHandler(), "%" +name+"%");}

 

6. Service层代码

接着写BookService.java中代码,末尾新增以下代码。

public List searchBookByName(String name);

然后具体实现代码,在BookServiceImpl.java中末尾添加以下代码。

public List searchBookByName(String name) {      try {         return bd.searchBookByName(name);      } catch (SQLException e) {         e.printStackTrace();      }      return null;   }

 

7.Servlet文件具体代码

下面是SearchBookAJAXServlet.java的完整代码。

package com.anthony.web.servlet;import java.io.IOException;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.anthony.service.BookService;import com.anthony.service.BookServiceImpl;public class SearchBookAJAXServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		response.setCharacterEncoding("UTF-8");		response.setContentType("text/html; charset=UTF-8");		String name = request.getParameter("name");				BookService bs = new BookServiceImpl();		List list = bs.searchBookByName(name);		// 把集合中元素转换成字符串返回到网页,多个元素逗号隔开		String str = "";		for (int i = 0; i < list.size(); i++) {			if(i > 0) {				str += ",";			}			str += list.get(i);		}		// 把数据响应到客户端		response.getWriter().write(str);	}	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		doGet(request, response);	}}

 

8.部署测试

部署到tomcat,重启tomcat服务。浏览器打开servlet地址,看看效果

这里我数据库看看是不是只有一个j开头的,这样我数据库book表再添加一个javascript看看。

这样就是说明代码没有问题了。

 

9. AJAX查询结果显示在div框中

下面我们来编辑menu_search.jsp文件,这里把文章开头写死div高度给删除,新加了AJAX这一套代码,代码修改如下

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
Search

刷新浏览器,看看/index.jsp效果,搜索框输入一个J看看,div框提示的效果。

到这里,还有问题没有解决,那就是点击div中提示,不能点击,我们需要点击之后,自动填充到search框。

10. Div中name鼠标悬停变颜色

就是在div提示的name,鼠标悬停,会自动变颜色,例如变成灰色,离开name区域变成原来的白色,来看看这个怎么实现

上面改动地方在changeBackground_over(div) 和changeBackground_out(div)

刷新浏览器,看看效果。

鼠标悬停变成灰色,鼠标离开变成白色,对比看看上面改动的两个这个动作的function就明白了。

 

11.解决点击搜索按钮,填充到搜索框

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
Search

关于这个代码最后div中,left和top的位置问题,会随着不同浏览器和不同分辨率,这个红色的div框位置有点偏移,这个问题,就不管了。

项目全部代码请看github:

这篇代码的commit message为 “”

转载地址:http://wnows.baihongyu.com/

你可能感兴趣的文章
eclipse安装插件的两种方式在线和离线
查看>>
linux下源的相关笔记(suse)
查看>>
linux系统分区文件系统划分札记
查看>>
Linux(SUSE 12)安装Tomcat
查看>>
Linux(SUSE 12)安装jboss4并实现远程访问
查看>>
Neutron在给虚拟机分配网络时,底层是如何实现的?
查看>>
netfilter/iptables全攻略
查看>>
Overlay之VXLAN架构
查看>>
Eclipse : An error occurred while filtering resources(Maven错误提示)
查看>>
在eclipse上用tomcat部署项目404解决方案
查看>>
web.xml 配置中classpath: 与classpath*:的区别
查看>>
suse如何修改ssh端口为2222?
查看>>
详细理解“>/dev/null 2>&1”
查看>>
suse如何创建定时任务?
查看>>
suse搭建ftp服务器方法
查看>>
centos虚拟机设置共享文件夹并通过我的电脑访问[增加smbd端口修改]
查看>>
文件拷贝(IFileOperation::CopyItem)
查看>>
MapReduce的 Speculative Execution机制
查看>>
大数据学习之路------借助HDP SANDBOX开始学习
查看>>
Hadoop基础学习:基于Hortonworks HDP
查看>>